/**
 * 
 */
package baduga.server;

import baduga.core.Core_JsonDataSchema;
import baduga.server.fasada.F_GameEnvSwitch;
import baduga.server.fasada.F_NetworkBehavior;
import baduga.server.fasada.F_PlayerEnvSwitch;
import baduga.server.fasada.F_TableEnvSwitch;

/**
 * @author Janek
 *
 */
public final  class  Network_Call__Controler {
	
	
	F_NetworkBehavior netBehav = new F_NetworkBehavior();
	F_TableEnvSwitch  tabEnvSw = new F_TableEnvSwitch();
	F_PlayerEnvSwitch plaEnvSw = new F_PlayerEnvSwitch();
	F_GameEnvSwitch gameEnvSw = new F_GameEnvSwitch();
	
	
	/**
	 * 
	 * Funkcja zajmuje się wykonaniem pewnych operacji
	 * 
	 */
	public  Core_JsonDataSchema globalSwitch(final Core_JsonDataSchema wData, final Network_API__Client_Thread wCliThr)
	{
		
		Core_JsonDataSchema result;
		
		switch(wData.getKod())
		{
			case 0x01:  //Połączenie
				result = newtowkBehawSwitch(wData, wCliThr);
			break;
			
			case 0x02: 
				result = playerEnvSwitch(wData);
			break;
			
			case 0x03:
				result = gameEnvSwitch(wData);
			break;
			
			case 0x04:
				result = tableEnvSwitch(wData);
			break;
			
			default:
				result = null;
			break;
		}
		
		return result;
		
	}
	
	
	/**
	 * 
	 * Switch zajmujący się rozdziałem poleceń dot. połączenia
	 * 
	 */
	private Core_JsonDataSchema newtowkBehawSwitch(final Core_JsonDataSchema wData, final Network_API__Client_Thread wCliThr)
	{
		
		
		Core_JsonDataSchema result = null;
		
	
		switch(wData.getArgs()[0])
		{
			case 0x01: //Autoryzacja
				
				result = netBehav.playerAuth(wData, wCliThr);
			break;
			
			case 0x02: //Rozłączenie
				result = netBehav.playerDisconnect(wData);
			break;
			
			case 0x03: //Ping
				//result = gameEnvSwitch(wData);
			break;
			
			default:
				result = null;
			break;
		}

		
		
		return result;
	}
	
	/**
	 * 
	 * Switch zajmujący się rozdziałem poleceń dot. strefy użytkowej (Środowiska Gracza)
	 * 
	 */
	private Core_JsonDataSchema playerEnvSwitch(final Core_JsonDataSchema wData)
	{
		Core_JsonDataSchema result = null;
		
		
		switch(wData.getArgs()[0])
		{
			case 0x01: //Typy
				//result = newtowkBehawSwitch(wData);
			break;
			
			case 0x02: //Pobranie małej ilości stołów
				result = F_PlayerEnvSwitch.getTableList(wData);
			break;
			
			case 0x03: //Pobranie informacji o stole
				//result = gameEnvSwitch(wData);
			break;
			
			case 0x04:	//pobranie historii o stole / graczu
				//result = tableEnvSwitch(wData);
			break;
			
			case 0x05: //pobranie ustawień o stole
				//result = tableEnvSwitch(wData);
			break;
			
			case 0x06: // pobranie ustawień stołu
				//result = tableEnvSwitch(wData);
			break;
			
			case 0x07: //zmiana pseudonimu
				//result = tableEnvSwitch(wData);
			break;
			
			default:
				result = null;
			break;
		}

		
		
		return result;
	}
	
	/**
	 * 
	 * Switch zajmujący się rozdziałem poleceń dot. strefy gry
	 * 
	 */
	private Core_JsonDataSchema gameEnvSwitch(final Core_JsonDataSchema wData)
	{
		Core_JsonDataSchema result = null;
		
		
		switch(wData.getArgs()[0])
		{
			case 0x01: //Ruch gracza
				//result = newtowkBehawSwitch(wData);
			break;
			
			case 0x02: //Ostatnia akcja gracza
				//result = playerEnvSwitch(wData);
			break;

			default:
				result = null;
			break;
		}

		
		
		return result;
	}
	
	/**
	 * 
	 * Switch zajmujący się rozdziałem poleceń dot. strefy stołu
	 * 
	 */
	private Core_JsonDataSchema tableEnvSwitch(final Core_JsonDataSchema wData)
	{
		Core_JsonDataSchema result = null;
		
		
		switch(wData.getArgs()[0])
		{
			case 0x01: //Utworzenie Stołu
				result = tabEnvSw.makeTable(wData);
			break;
			
			case 0x02: //Dołączenie do stołu
				result = tabEnvSw.playerJoinTable(wData);
			break;
			
			case 0x03: //Opuszczenie stołu
				result = tabEnvSw.playerLeftTable(wData);
			break;
			
			case 0x04: //Stan gotowości
				result = tabEnvSw.playerIsReady(wData);
			break;
			
			case 0x05: //Migracja wew. stołu
				result = tabEnvSw.playerMigrationInTable(wData);
			break;
			
			
			/*
			case 0x06: //BroadCastText
				result = tabEnvSw.playerContentUpdate(wData);
			break;
			*/
			
			/*
			case 0x07: //Powiadomienie pozostąłych graczy o zmianie w składzie stołu
				result = tabEnvSw.playerContentUpdate(wData);
			break;
			*/

			default:
				result = null;
			break;
		}

		
		
		return result;
	}

}
